feat: generic NV upgrade test suite + pin to NV28 actor bundle refs#276
Merged
parthshah1 merged 4 commits intomainfrom Apr 23, 2026
Merged
feat: generic NV upgrade test suite + pin to NV28 actor bundle refs#276parthshah1 merged 4 commits intomainfrom
parthshah1 merged 4 commits intomainfrom
Conversation
- Star-split/bisection: disconnect Forest via NetDisconnect instead of NetBlockAdd (which Forest doesn't support). Prevents Forest from acting as a gossip bridge that defeats the partition topology. - F3 agreement: compare full cert data (power table CID, supplemental data commitments, aggregate signature) across Lotus and Forest, not just ECChain key. Catches subtle cross-implementation divergence in finalized certificates.
- env.fip: take main's comprehensive weights, add back UPGRADE_SUITE=5, remove zero overrides that conflicted with new non-zero values - consensus_vectors.go: take main's version (drop signatureShort — caused false positives in F3 cert comparison) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Pin lotus to d036ad9 and forest to nv28-2k-testing (post-NV28 binaries) - Rename XX_HEIGHT → FIREHORSE_HEIGHT across every profile (matches FOREST_FIREHORSE_HEIGHT / LOTUS_FIREHORSE_HEIGHT expected by the new binaries, per ChainSafe/forest#6943) - Lower GOLDENWEEK=20 / FIREHORSE=50 in all profiles so every run spends most of its time in post-NV28 state - Refactor upgrade_vectors.go to multi-boundary with per-assertion boundary labels; adds doChainProgressAcrossBoundary (Sometimes, stall detector) and doPostUpgradeNodeHealth (Sometimes, robust to Antithesis fault injection); null-tipset guard on upgrade activation - DoUpgradeSuite remains gated to env.fip only (weight 0 elsewhere) so the other profiles' reports stay focused on their own scope Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
d036ad9521d6621b5393d3d1b707a9994e94feedand forest tonv28-2k-testing, the branches carrying the NV28 actor bundles.XX_HEIGHT→FIREHORSE_HEIGHTacross every profile to match the env vars the new binaries read (FOREST_FIREHORSE_HEIGHT,LOTUS_FIREHORSE_HEIGHT; see feat: nv28 support for devnet ChainSafe/forest#6943). LowerGOLDENWEEK=20/FIREHORSE=50everywhere so all runs spend most of their time in post-NV28 state.What's in the suite
DoUpgradeSuite(single deck entry, weight 5, enabled only inenv.fip) iterates the configured boundaries[{NV27, 20}, {NV28, 50}]and runs:doNetworkVersionAgreement— all nodes report same NV (Always)doUpgradeActivation— per-node pre/post NV check with null-tipset guard (Always)doMigrationStateRootAgreement— state root matches atepoch-1,epoch,epoch+1(Always)doReceiptConsistencyAtBoundary— receipt roots match atepoch+1(Always)doChainProgressAcrossBoundary— chain advances in[epoch, epoch+20]window (Sometimes, robust to Antithesis time-dilation)doPostUpgradeNodeHealth— every node responsive and past boundary at some point post-upgrade (Sometimes)doBoundaryMessageBurst,doActorChurnAtBoundary— stress timed to the boundary (Reachable)FIP-specific hooks go in per-upgrade files later via
RegisterFIPBoundaryFunc.Why not other profiles
STRESS_WEIGHT_UPGRADE_SUITEis unset inenv.nightly/env.consensus/env.foc/env.drand, defaulting to weight 0 soDoUpgradeSuitenever fires there. The upgrades still happen mid-run in those profiles so the binaries get exercised in post-NV28 state, but no upgrade-specific assertions clutter their reports.Test plan
filecoinnotebook smoke run (triggered by theantithesis-test-filecoinlabel on this PR)boundarylabels in the Antithesis reportAlwaysassertions under fault injection🤖 Generated with Claude Code